package cn.zyq.charging.order.controller;

import cn.zyq.charging.order.pojo.param.OrderAddParam;
import cn.zyq.charging.common.pojo.JsonResult;
import cn.zyq.charging.order.service.OrderService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

/**
 * 订单接口
 * @author yonqing.zhao
 */
@Slf4j
@Api(tags = "订单接口")
@RestController//这个注解属于springmvc注解springboot-starter-web
@RequestMapping("/order")//这个注解属于springmvc注解springboot-starter-web
public class OrderController {

    @Autowired
    private OrderService orderService;

    /**
     * 创建订单
     * @param orderAddParamDTO
     * @return
     */
    @ApiOperation("创建订单")
    @PostMapping("/createOrder")
    //如果不加@RequestBody注解则knife4j的测试文档的入参会以输入框的形式要求输入
    //public JsonResult createOrder(OrderAddParam orderAddParamDTO){
    //加@RequestBody注解knife4j的测试文档的入参会要求以json的形式要求输入
    //json格式提交的参数
    //{
    //  "gunId": 0,
    //  "pileId": 0,
    //  "userId": 0
    //}
    //@RequestBody注解作用(springmvc框架的注解)：接收post方式提交的json格式的参数。
    //@Validated是springValidation框架的注解，作用是校验参数
    public JsonResult createOrder(@Validated  @RequestBody OrderAddParam orderAddParamDTO) throws  Exception{
        //TODO: 创建订单的流程，自顶向下编程。
        //debug的使用规则：每次调用别人的代码的时候都要加上debug，测试入参和出参
        log.debug("创建订单方法：-createOrder({})", orderAddParamDTO);
        //createOrder()入参是：orderAddParamDTO
        //此debug是为了测试传给service的参数是正确的。
        log.debug("创建订单方法：-createOrder({})的入参", orderAddParamDTO);
        //createOrder()出参是： 订单号orderNo
        String orderNo=orderService.createOrder(orderAddParamDTO);
        log.debug("创建订单方法：-createOrder()返回值{}", orderNo);
        JsonResult jsonResult = new JsonResult();
        jsonResult.setData(orderNo);
        jsonResult.setCode(2000);
        jsonResult.setMessage("订单创建成功");
        //检查controller的出参方法是为了测试： controller出参是否正确(如果controller出参正确，但页面失败则证明页面有问题)
        //比如前端工程师写成了：if(code != 2000){ alert('订单创建成功'); }
        log.debug("创建订单方法：-createOrder()返回值{}", orderAddParamDTO);
        return jsonResult;
    }
}
